Projet Final - Kit Big Data

Vendée Globe 2020-2021

Thomas Loiseau (TLoiseau-21)

Introduction

Pour la réalisation de ce projet, nous allons nous étudier le classement du Vendée Globe 2020-2021. Pour cette édition, 33 participants se sont présenté sur la ligne de départ. Pour rappel, le Vendée Globe est à ce jour la plus grande course à la voile autour du monde, en solitaire, sans escale et sans assistance. La course longue de plus de plus de 44 900 kilomètres soit 24 296 milles à pour départ et arrivé la ville des Sables d'Olonne. Dans la réalité lors des huit précédentes éditions du Vendée Globe, la plupart des concurrents ont parcouru parfois plus de 28 000 milles (soit quasiment 52 000 kilomètres).

En effet, cette course est avant tout un voyage climatique pour descendre l'Atlantique, traverser l'océan Indien et le Pacifique, puis remonter de nouveau l'Atlantique... Les solitaires du Vendée Globe doivent en permanence jouer avec les systèmes météo. Ils sont composés d'anticyclones, zones de hautes pression plutôt stables et peu ventées et de dépressions, le plus souvent génératrices de vents forts. Le jeu consiste à trouver le bon équilibre : suffisamment loin des centres dépressionnaires pour éviter les vents les plus forts sans se faire engluer dans les hautes pressions. Il ne faut pas prendre non plus à la légére les courrant marains ainsi que les vagues de côtés qui peuvent faire dévier de cap voir faire chavirer le bateau.

Comme nous le verons par la suite, les données du dernier Vendée Globe sont disponibles sous la forme de fichiers Excel avec les classements fournis plusieurs fois par jour par les organisateurs de la course. Il y a également une page web avec une fiche technique par voilier qui contient des informations techniques et qu'il est possible de rapprocher des classements.

Ainsi dans ce rapport, nous allons dans un premier temps récupérer la donnée (téléchargement des fichiers excels puis les compiler ou bien les scrapper directement sur le site de la compétition). Dans un second temps nous allons nettoyer l'information afin de la rendre utilisable pour de prochaine analyse. Par la suite, nous allons nous pencher plus sur un aspect d'apprentissage statistique. En effet, nous allons essayer de prédire la vitesse et la distance parcoure par les marins en 30 minutes. Nous en profiterons pour faire quelques études préalables avec notamment quelques graphiques. Enfin, avant de conclure nous essayerons d'enrichir les données avec la météo (vent, courant marins, vagues) et relancer la même analyse afin de vérifier s'il y a bien une amélioration des performances de nos prédictions.

Etape 1 : Récupération de la donnée

Tel que mentionné en introduction, les données du dernier Vendée Globe sont disponibles sous la forme de fichiers Excel avec les classements fournis plusieurs fois par jour par les organisateurs de la course. Ces fichiers contiennent des informations très importantes pour la suite de notre analyse, telles que l'horodatage (date et heure), la position géographique, le cap suivi, les vitesses et distances parcourues (en 30 minutes, 3 heures ou 24 heures) ainsi que la distance minimale restant à parcourir ou celle au premier du classement.

Dans un second temps, nous avons également une page web avec les fiches techniques de chaque voilier de la compétition. Nous pouvons ici y retrouver des caractéristiques à propos du bateau comme ses dimensions (longueur, Largeur, hauteur du mât), sur son poids (Tirant d'eau, Déplacement), la surface de ses voiles (voiles au près, voiles au portant) ou encore des données structurelles comme les matériaux utilisés pour la quille, son nombre de dérive, etc.

Dans cette partie nous allons télécharger la donnée sans toutefois la nettroyer (partie 2).

Récupération de la donnée de classement

Comme nous le verrons ci-dessous, la récupération des fichiers excel ne peut pas se faire directement par pandas. En effet, comme mentionné dans la section Questions/Réponses de l'enoncé du projet, il y a parfois un bug avec pandas qui s'appuie à présent sur plusieur autres librairies pour récuperer les données. Malheursement, il ne sais pa bien gere la présence des photos/images. En ressort une erreur concernant l'argument 'xxid'.

Pour palier ce problème, il était conseillé de passer par la librairie xlwings. Malheureusement, pour une raison qui m'échappe encore, je ne suis pas parvenu à l'utiliser malgré le fragment de code donné. J'ai passé beaucoup de temps à trouver un moyen de lire les fichiers souhaités (facilement 3 jours entier de travail) avant de trouver qu'il était possible d'utiliser pylightxl la librairie dont se servait pandas.

La documentation de la librairie utilisé est diponible ici: https://pylightxl.readthedocs.io/_/downloads/en/latest/pdf/ https://pylightxl.readthedocs.io/en/latest/index.html

Ainsi le chargement des données de classement se fait en deux phases :

Récupération des données techniques des bateaux

Cette partie m'a posé beaucoup moins de difficultés que la précédente. Ainsi à partir de BeautifulSoup il est très aisé de récupré dans le code source de la parge les informations nécessaires et de les structurer dans un dataframe.

Etape 2 : Nettoyage

Comme nous pouvons le voir dans la partie précédante, nous devons impérativement nettoyer la donné afin de la rendre utilisable pour les modèles d’analyses que nous souhaitons mettre par la suite en place. En effet, la donnée brute telle que nous l'avons récupérée dans l'étape précédente, la donnée comporte de nombreuses case vide, des valeurs nomerique avec leurs unités accollées, de trop nobreuses valeurs catégorielles, etc.

Nous allons dans cette section exposer les corrections apportés au deux dataframes précédemment créés.

Nettoyage de la donnée de classement

Le dataframe des classements réguliers de la compétition à nécessité dans un premier temps la supressions de nombreux uplets parasites. En effet, à partir du moment ou un participant depasse la ligne d'arrivé, le fichier excel est alors scind en deux parties : tout d'abors le classement à l'arrivé n'ayant les temps de courses totaux, vient ensuite le tableau "normal" de la progression du skipper entre chaque relevé. Ainsi pour nettoyer les participants déjà arrivés ou ayant abandonnés, non supprime dans un premier temps toutes les lignes ayant un attribut latitude ou un rang caractere vide (""), puis nous conservons uniquement les lignes que ne possedent pas de texte dans leurs rangs (ARV ou RET)

Par la suite, le nettoyage à principalement consité à extraire de partie numériques des cellules et de les convertir dans le bon format (int ou float)

Nettoyage des données techniques des bateaux

Pas grand-chose à expliquer non plus pour cette partie, le dataframe a surtout subi de l'extraction et du formatage de valeurs numériques.

Notons toutefois que nous avons munuellement complété le numéro de participant de l'un des skippers ainsi que nettoyer les valeurs catégorielles des architectes de bateaux. Cette variable ainsi que "voile quille" et "Nombre de dérives" sont à la fin transformés en variables 1hot.

Enfin, nous avons fait le choix de supprimer les variables "Name","Anciens noms du bateau","Chantier" car celles-ci sont toutes différentes et n'apportent pas d'informations utiles.

Jointure des dataframe

Maintenant que nous avons netroyé las données des deux cotés, nous pouvons faire une jointure en utilisant d'un coté l'attribut "Nat. / Sail" et de l'autre "Numéro de voile".

Etape 3 : Analyse

Maintenant que nous avons entierement nettoyé notre dataFrame, nous pouvons passer à la partie la plus importante du projet : L'analyse afin d'en sortir des connaisance utiles

Carte des parcours des skipper

Commencons notre analyse par un peu de data viz afin de regarder les parcours des participants. Avec la carte ci dessous, nous pouvons voir l'ensemble des tracés de chaque compétiteur. Ainsi, il est possible de selectionner dans la légende le compétiteur qu'on sohaite afficher ou non.

Grâce à cet outils nous pouvons plus facilement nous rendre compte que Alex Tompson à arrété la compétion au niveau du cap de bon espérence, tansique Sébastien Destremau à prolongé sa route jusqu'à la nouvelle zelande.

Prédiction de la distance parcourrue en une journée en fonction des autres paramètres

Maintenant passons à une analyse un peu plus sérieuse. Nous allons essayer dans cette partie de prédire la distance parcourue par les skippers en une journée et voir les paramètres qui influencent le plus la prédiction.

Pour cela nous avons séparé notre dataset en deux parties : entrainement et test, comme nous pouvons le voir çi-dessous.

Notons toutefois que nous conservons uniquement dans les variables explicatives x les valeurs qui ne sont pas liées aux valeurs des 24 dernières heures ainsi que celle permettant l'identification du bateau.

Puis nous normalisons nos datasets

Pour réaliser notre régression linéaire nous utilisons un algorithme de régularisation de Lasso qui possède l'avantage d'attribuer à certaines variables peu intéressantes un coefficient nul dans la régression. Pour ne pas influencer le modèle en attribuant un paramètre $alpha$ arbitraire, nous choisissons de la faire varier et de prendre le meilleur, c'est-à-dire celui qui minimise l'erreur.

On regarde maintenant la performance de nos modèles via le coefficient de détermination $R^2$, qui est le ratio entre variance 'expliquée' et variance 'totale'. Plus il est proche de 1, meilleur est le modèle, car il est capable de déterminer une majorité de points.

Comme nous pouvons le voir ci-dessus, nous obtenons un $\alpha$ de 0.03 qui est bien compris entre les bornes de notre intervalle de test. Cela signifie que nous avons trouvé un alpha optimal pour ce problème. Cependant, le $R^2$ est vraiment mauvais. Pour rappel: on considère que le $R^2$ commence à être acceptable à partir de 0.8.

Jetons un coup d'oeil aux paramètres utilisés par notre modèle

Comme nous pouvons le constater dans le tableau récapitulatif ci-dessus, les paramètres les plus importants pour la prédiction des retards sont les données du dernier rapport (vitesse, VMG).

Bien entendu les principales caractérisitiques techniques du bateau influent grandement la distance, notamment en première position la présence d'un foil à la place des dérives.

La longitude et l'horodatage jouent également un rôle dans la distance parcourue, cela est sans doute lié à la présence de certains courants importants ou du vent (nous essayerons de voir cela dans la partie suivante).

Il est intéressant également de noter que certaines Architecte sont plus susceptibles de produire des bateaux parcourant plus de distance en 24H que d'autres (moralité : bien choisir la compagnie avec laquelle un skipper conçoit son bateau).

Prédiction de la distance parcourue en une journée en fonction des autres paramètres en incluant le nom du skipper

Refaisons la même analyse en incluant cette fois le skipper afin de voir si les résultats de la course sont uniquement dictés par la performance des bateaux ou bien également par la compétence du navigateur.

Pour cette analyse nous conservons un $R^2$ semblable à la première, cependant nous voyons apparaître dans le tableau des coefficients que certains marins influencent le modèle comme : Jérémie Beyou, Giancarlo Pedote ou Samuel Manuard pour ne citer qu'eux. Nous avons donc bien montré que la compétence du skipper est également un facteur à prendre en compte dans la course.

Etape 4 : Enrichissement

Tel que mentionné en introduction, cette course est avant tout un voyage climatique pour descendre l'Atlantique, traverser l'océan Indien et le Pacifique, puis remonter de nouveau l'Atlantique... Les solitaires du Vendée Globe doivent en permanence jouer avec les systèmes météo. Ils sont composés d'anticyclones, zones de hautes pression plutôt stables et peu ventées et de dépressions, le plus souvent génératrices de vents forts.

Malheureusement, dans notre jeu de données, nous n'avons aucune information météorologique pourtant essentielle à la course.

Ainsi dans cette partie nous allons essayer de récupérer des données sur le vent, les courants marins ou encore les vagues à la position des compétiteurs. N'ayant pas trouvé une base de donnée textuelle, nous allons devoir la scrapper depuis le net. Pour cela nous utiliserons https://classic.nullschool.net/. Cependant, le gros problème de cette base est que la donnée se charge par javascript, elle n'est donc pas directement récupérable par la BeautifullSoup. Pour palier cette difficulté nous avons utilisé la libraire Selenium qui émule un navigateur Firefox

Le seul problème de cet algorithme est qu'il prend énormement de temps à s'éxécuter, en effet, il faut laisser à Selenium environ une seconde pour charger une page web. Comme nous avons un peu plus de 15000 positions dans notre dataframe, que nous devons pour chacune d'entre elles faire 3 appels au site et attendre à chaque fois 1 seconde, cela revient à attendre:

$15000 \times 3 = 45000 s = 12h30min$ c'est infaisable.

Toutefois, je vous mets le code totalement fonctionnel ci-dessous.

gif_scrapgif

Ainsi si nous avions pu récupérer l'information comme souhaité l'objectif suivant aurait été de prédire comme précédemment la distance parcourue avec ces nouveaux paramètre et voir si l'on obtient de meilleurs résultats et constater à quel point la météo possède un coefficient élevé dans la régression Lasso.

Conclusion

Dans ce projet nous nous sommes intéressé aux données du Vendée Globe 2020-2021. Pour cela, nous avons (non sans mal) récupéré des fichiers excels des classements provisoires de la course ainsi que les données techniques des bateaux. Par la suite nous les avons nettoyés/traités afin de rendre la donnée utilisable par un système d'analyse statistique.

Après avoir fait une petite carte pour montrer les parcours des participants, nous avons voulu savoir quels était les paramètres qui influancent le plus la distance parcourue par les marins en 24 heures pour cela nous avons utilisé une régression Lasso. Nous avons bien entendu observé que les principales caractéristiques techniques du bateau influent grandement la distance, notamment en première position la présence d'un foil à la place des dérives. Nous avons également constaté que les concepteurs/architectes des bateaux ont eux aussi une influence dans le résultat.

En voyant cela nous avons voulu savoir si la course est uniquement dictée par le matériel ou si la compétence du skipper agit,elles aussi, sur le résultat. Ainsi dans un second temps nous avons bien observé que le marin influence positivement les variables du modèle sans toutefois améliorer la qualité de la prédiction.

Ainsi dans un dernier temps nous avons voulu récupérer le facteur le plus important de la course : la météo et plus particulièrement la force et la direction du vent, le sens des courants marins et la direction et hauteur des vagues. Malheureusement, face aux temps de calcul extrêmement long, nous n'avons pas pu finir cette analyse.

C'était un très bon projet, très intéressant qui ferait un bon sujet de hackaton. Je ne doute pas de ma capacité à mener à terme toutes les analyses souhaitées si j'avais eu un peu plus de temps et la possibilité de répartir le scrapping sur plusieurs ordinateurs.